解答1[Java]:
class Solution {
public int minSubArrayLen(int s, int[] nums) {
int left = 0;
int right = -1;
int sum = 0;
int result = nums.length + 1;
while (left < nums.length) {
if (right + 1 < nums.length && sum < s) {
sum += nums[++right];
} else {
sum -= nums[left++];
}
if (sum >= s) {
result = min(result, right - left + 1);
}
}
if (result == nums.length + 1) {
result = 0;
}
return result;
}
private int min(int a, int b) {
return a < b ? a : b;
}
}
思路
left
和 right
之间形成一个动态窗口,每次根据窗口内的元素的和与给定的数字作比较,确定是收缩窗口还是向右扩大窗口。